package net.linku.annotation.change.service;

import net.linku.annotation.ChangeRecordLog;
import org.aspectj.lang.JoinPoint;

/**
 * 内容解析器接口，用于根据不同的条件获取查询对象。
 *
 * <p>此接口定义了三个方法，用于从方法参数或ID获取数据。这些方法根据提供的
 * {@link ChangeRecordLog} 注解中的配置来执行相应的查询。</p>
 *
 */
public interface ContentParser {

    /**
     * 根据切点信息和变更记录注解获取查询结果。
     *
     * <p>该方法从切点信息中提取查询参数，并使用提供的注解进行数据查询。</p>
     *
     * @param joinPoint 切点信息，包含方法调用的参数
     * @param operateLog 变更记录注解，指定查询条件和服务类信息
     * @return 查询结果对象，根据 ID 或其他条件查询得到的数据
     */
    public Object getResult(JoinPoint joinPoint, ChangeRecordLog operateLog);

    /**
     * 根据对象及变更记录注解获取查询结果。
     *
     * <p>该方法从给定的对象中提取查询参数，并使用提供的注解进行数据查询。</p>
     *
     * @param obj 查询条件的对象，通常包含需要查询的ID或其他字段
     * @param operateLog 变更记录注解，指定查询条件和服务类信息
     * @return 查询结果对象，根据 ID 或其他条件查询得到的数据
     */
    public Object getResult(Object obj, ChangeRecordLog operateLog);

    /**
     * 根据 ID 和变更记录注解获取查询结果。
     *
     * <p>该方法直接根据提供的 ID 查询数据，并使用提供的注解来确定查询方式和服务类。</p>
     *
     * @param modifyId 修改记录的ID，用于查询数据
     * @param operateLog 变更记录注解，指定查询条件和服务类信息
     * @return 查询结果对象，根据 ID 查询得到的数据，如果 ID 为空，则返回 null
     */
    Object getResultById(Object modifyId, ChangeRecordLog operateLog);
}
